
from lib.api import *
import re


def suite_setup():
    INFO('返回token')
    response = requests.post("http://******************/api/v1/auth/userToken",
                             json={"userAccount": "******************", "password": "******************"}
                             )
    global auth_token
    auth_token = str(response.json()["data"]["token"])


class API_2022:
    name = 'API_2022'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO('前置条件：token 正确，appName：BAS%2CAFC 正确，locationId 不填')
        urlpara = {         #参数为可选项
            # 'locationId':349,
            'appName': 'BAS,AFC'
        }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 headers={
                                     "auth-token": auth_token
                                 },
                                 params=urlpara
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[8][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))



class API_2023:
    name = 'API_2023'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO('前置条件：token 过期，appName：BAS%2CAFC 正确，locationId 不填')
        urlpara = {         #参数为可选项
            # 'locationId':349,
            'appName': 'BAS,AFC'
        }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 headers={
                                     "auth-token": 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlS2V5IjoiIiwidXNlck5hbWUiOiJ5enlhZG1pbiIsImV4cCI6MTYyMTkzNzIwNCwidXNlcklkIjoieXp5YWRtaW4ifQ.xVITR8Cn0zLrJSA3tKMt48bTyk6tFhlRwjIp4e_yFys'
                                 },
                                 params=urlpara
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[9][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))


class API_2024:
    name = 'API_2024'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO('前置条件：token 不填，appName：BAS%2CAFC 正确，locationId 不填')
        urlpara = {         #参数为可选项
            # 'locationId':349,
            'appName': 'BAS,AFC'
        }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 # headers={
                                 #     "auth-token": 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlS2V5IjoiIiwidXNlck5hbWUiOiJ5enlhZG1pbiIsImV4cCI6MTYyMTkzNzIwNCwidXNlcklkIjoieXp5YWRtaW4ifQ.xVITR8Cn0zLrJSA3tKMt48bTyk6tFhlRwjIp4e_yFys'
                                 # },
                                 params=urlpara
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[9][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))




class API_2025:
    name = 'API_2025'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO("前置条件：token正确，'appName': 'ECS%CFYM'错误，虽然存在，但不再目标appName内，locationId不填")
        urlpara = {         #参数为可选项
            # 'locationId':349,
            'appName': 'ECS,FYM'
        }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 headers={
                                     "auth-token": auth_token
                                 },
                                 params=urlpara
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[9][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))


class API_2026:
    name = 'API_2026'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO('前置条件：token 正确，appName 为空，locationId 不填')
        # urlpara = {         #参数为可选项
        #     # 'locationId':349,
        #     'appName': 'ECS'
        # }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 headers={
                                     "auth-token": auth_token
                                 }
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[9][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))




class API_2027:
    name = 'API_2027'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO('前置条件：token 正确，appName：BAS%2CAFC 正确，locationId：349 正确')
        urlpara = {         #参数为可选项
            'locationId':349,
            'appName': 'BAS,AFC'
        }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 headers={
                                     "auth-token": auth_token
                                 },
                                 params=urlpara
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[8][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))



class API_2028:
    name = 'API_2028'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO('前置条件：token 正确，appName：BAS%2CAFC 正确，locationId：347 错误，虽然347存在，但不在目标location内')
        urlpara = {         #参数为可选项
            'locationId':347,
            'appName': 'BAS,AFC'
        }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 headers={
                                     "auth-token": auth_token
                                 },
                                 params=urlpara
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[9][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))


class API_2029:
    name = 'API_2029'       # 测试用例名字
    def teststeps(self):

        INFO('数据点监控接口：通过子系统查询设备自检信息 测试     #2.4')
        INFO('前置条件：token 为空，appName 为空， locationId 为空')
        # urlpara = {         #参数为可选项
        #     'locationId':347,
        #     'appName': 'AFC,PSD,BAS'
        # }
        response = requests.post("http://******************/api/v1/dataManagement/getStatusByAppName",
                                 # headers={
                                 #     "auth-token": auth_token
                                 # },
                                 # params=urlpara
                                 )
        expectedResult = json.dumps(json.loads(am.expectedResult()[9][3]), ensure_ascii=False, indent=4)
        outExpectedResult = '预期结果:\n' + expectedResult
        INFO(outExpectedResult)
        am.printResponse(response)
        result = sorted(set(re.sub('\\s|{|}|\\[|]','',expectedResult).split(',')) ^ set(re.sub('\\s|{|}|\\[|]','',response.content.decode('utf8')).split(',')))           #对比两个字符串中的不同并打印
        INFO('\n对比结果：\n'+str(result))
        CHECK_POINT('预期结果和输出结果是否保持一致',expectedResult==response.content.decode('utf8'))